package be.ipl.pigolo.domaine;

import java.io.Serializable;
import java.util.Comparator;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.Min;

@SuppressWarnings("serial")
@Entity
@Table(name = "PARTIEFERMIER", schema = "PIGOLO")
public class PartieFermier implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int id;

	@ManyToOne
	private Fermier fermier;

	@Min(0)
	private int purins;

	public PartieFermier() {
		super();
	}

	public PartieFermier(Fermier fermier) {
		super();
		this.fermier = fermier;
		this.purins = 5;
	}

	/**
	 * Méthode qui renvoie l'id de PartieFermier
	 * 
	 * @return id
	 */
	public int getId() {
		return id;
	}

	/**
	 * Méthode qui renvoie le fermier de PartieFermier
	 * 
	 * @return fermier
	 */
	public Fermier getFermier() {
		return fermier;
	}

	/**
	 * Méthode qui renvoie les purins de PartieFermier
	 * 
	 * @return purins
	 */
	public int getPurins() {
		return purins;
	}

	/**
	 * Méthode qui permet de modifier le nombre de purins de PartieFermier
	 * 
	 * @param purins
	 *            le nouveau nombre de purins
	 */
	public void setPurins(int purins) {
		this.purins = purins;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PartieFermier other = (PartieFermier) obj;
		if (id != other.id)
			return false;
		return true;
	}

	/**
	 * ajoute un purin au joueur
	 */
	public void ajouterPurin() {
		purins++;
	}

	/**
	 * retire un purin au joueur
	 */
	public void supprimerPurin() {
		if (purins <= 1) {
			purins = 0;
			this.getFermier().setStatusJeu(Fermier.STATUS_JEU.OBSERVATEUR);
			return;
		}
		purins--;
	}

	/**
	 * Classe qui permet de comparer les fermiers par nom
	 * 
	 */
	public static class PartieFermierComparator implements
			Comparator<PartieFermier> {

		@Override
		public int compare(PartieFermier j1, PartieFermier j2) {
			return j1.getFermier().getNom().compareTo(j2.getFermier().getNom());
		}

	}

}
